home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / misc / dspice0s / dcsol.c < prev    next >
C/C++ Source or Header  |  1992-11-21  |  6KB  |  186 lines

  1. /* dcsol.f -- translated by f2c (version of 3 February 1990  3:36:42).
  2.    You must link the resulting object file with the libraries:
  3.     -lF77 -lI77 -lm -lc   (in that order)
  4. */
  5.  
  6. #include "f2c.h"
  7.  
  8. /* Common Block Declarations */
  9.  
  10. struct {
  11.     integer ielmnt, isbckt, nsbckt, iunsat, nunsat, itemps, numtem, isens, 
  12.         nsens, ifour, nfour, ifield, icode, idelim, icolum, insize, 
  13.         junode, lsbkpt, numbkp, iorder, jmnode, iur, iuc, ilc, ilr, 
  14.         numoff, isr, nmoffc, iseq, iseq1, neqn, nodevs, ndiag, iswap, 
  15.         iequa, macins, lvnim1, lx0, lvn, lynl, lyu, lyl, lx1, lx2, lx3, 
  16.         lx4, lx5, lx6, lx7, ld0, ld1, ltd, imynl, imvn, lcvn, nsnod, 
  17.         nsmat, nsval, icnod, icmat, icval, loutpt, lpol, lzer, irswpf, 
  18.         irswpr, icswpf, icswpr, irpt, jcpt, irowno, jcolno, nttbr, nttar, 
  19.         lvntmp;
  20. } tabinf_;
  21.  
  22. #define tabinf_1 tabinf_
  23.  
  24. struct {
  25.     doublereal atime, aprog[3], adate, atitle[10], defl, defw, defad, defas, 
  26.         rstats[50];
  27.     integer iwidth, lwidth, nopage;
  28. } miscel_;
  29.  
  30. #define miscel_1 miscel_
  31.  
  32. struct {
  33.     integer locate[50], jelcnt[50], nunods, ncnods, numnod, nstop, nut, nlt, 
  34.         nxtrm, ndist, ntlin, ibr, numvs, numalt, numcyc;
  35. } cirdat_;
  36.  
  37. #define cirdat_1 cirdat_
  38.  
  39. struct {
  40.     doublereal value[200000];
  41. } blank_;
  42.  
  43. #define blank_1 blank_
  44.  
  45. /*<       subroutine dcsol >*/
  46. /* Subroutine */ int dcsol_()
  47. {
  48.     /* System generated locals */
  49.     integer i_1;
  50.  
  51.     /* Local variables */
  52.     static integer iord, jord, i, j, locnn;
  53.     extern integer indxx_();
  54.     static doublereal t1, t2;
  55.     extern /* Subroutine */ int second_();
  56. #define nodplc ((integer *)&blank_1)
  57. #define cvalue ((complex *)&blank_1)
  58.     static integer loc;
  59.  
  60. /*<       implicit double precision (a-h,o-z) >*/
  61.  
  62. /*     this routine solves the system of circuit equations by performing 
  63. */
  64. /* a forward and backward substitution step using the previously-computed 
  65. */
  66. /* lu factors. */
  67.  
  68. /* spice version 2g.6  sccsid=tabinf 3/15/83 */
  69. /*<       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem, >*/
  70. /*<      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize, >*/
  71. /*<      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr, >*/
  72. /*<      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1, >*/
  73. /*<      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd, >*/
  74. /*<      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval, >*/
  75. /*<      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt, >*/
  76. /*<      7   irowno,jcolno,nttbr,nttar,lvntmp >*/
  77. /* spice version 2g.6  sccsid=miscel 3/15/83 */
  78. /*<       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad, >*/
  79. /*<      1  defas,rstats(50),iwidth,lwidth,nopage >*/
  80. /* spice version 2g.6  sccsid=cirdat 3/15/83 */
  81. /*<       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop, >*/
  82. /*<      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc >*/
  83. /* spice version 2g.6  sccsid=blank 3/15/83 */
  84. /*<       common /blank/ value(200000) >*/
  85. /*<       integer nodplc(64) >*/
  86. /*<       complex cvalue(32) >*/
  87. /*<       equivalence (value(1),nodplc(1),cvalue(1)) >*/
  88.  
  89. /*  forward substitution */
  90.  
  91. /*<       call second(t1) >*/
  92.     second_(&t1);
  93. /*<       do 20 i=2,nstop >*/
  94.     i_1 = cirdat_1.nstop;
  95.     for (i = 2; i <= i_1; ++i) {
  96. /*<       loc=i >*/
  97.     loc = i;
  98. /*<       iord=nodplc(irswpf+i) >*/
  99.     iord = nodplc[tabinf_1.irswpf + i - 1];
  100. /*<    10 loc=nodplc(jcpt+loc) >*/
  101. L10:
  102.     loc = nodplc[tabinf_1.jcpt + loc - 1];
  103. /*<       if (nodplc(jcolno+loc).ge.i) go to 20 >*/
  104.     if (nodplc[tabinf_1.jcolno + loc - 1] >= i) {
  105.         goto L20;
  106.     }
  107. /*<       j=nodplc(jcolno+loc) >*/
  108.     j = nodplc[tabinf_1.jcolno + loc - 1];
  109. /*<       jord=nodplc(irswpf+j) >*/
  110.     jord = nodplc[tabinf_1.irswpf + j - 1];
  111. /*<       value(lvn+iord)=value(lvn+iord)- >*/
  112. /*<      1           value(lvn+loc)*value(lvn+jord) >*/
  113.     blank_1.value[tabinf_1.lvn + iord - 1] -= blank_1.value[tabinf_1.lvn 
  114.         + loc - 1] * blank_1.value[tabinf_1.lvn + jord - 1];
  115. /*<       go to 10 >*/
  116.     goto L10;
  117. /*<    20 continue >*/
  118. L20:
  119.     ;}
  120.  
  121. /*     back substitution */
  122.  
  123. /*<       i=nstop >*/
  124.     i = cirdat_1.nstop;
  125. /*<       iord=nodplc(irswpf+i) >*/
  126.     iord = nodplc[tabinf_1.irswpf + i - 1];
  127. /*<       jord=nodplc(icswpf+i) >*/
  128.     jord = nodplc[tabinf_1.icswpf + i - 1];
  129. /*<       locnn=indxx(iord,jord) >*/
  130.     locnn = indxx_(&iord, &jord);
  131. /*<    30 value(lvn+iord)=value(lvn+iord)/value(lvn+locnn) >*/
  132. L30:
  133.     blank_1.value[tabinf_1.lvn + iord - 1] /= blank_1.value[tabinf_1.lvn + 
  134.         locnn - 1];
  135. /*<       i=i-1 >*/
  136.     --i;
  137. /*<       if (i.le.1) go to 100 >*/
  138.     if (i <= 1) {
  139.     goto L100;
  140.     }
  141. /*<       iord=nodplc(irswpf+i) >*/
  142.     iord = nodplc[tabinf_1.irswpf + i - 1];
  143. /*<       loc=i >*/
  144.     loc = i;
  145. /*<    35 loc=nodplc(jcpt+loc) >*/
  146. L35:
  147.     loc = nodplc[tabinf_1.jcpt + loc - 1];
  148. /*<    40 if (nodplc(jcolno+loc).ne.i) go to 35 >*/
  149. /* L40: */
  150.     if (nodplc[tabinf_1.jcolno + loc - 1] != i) {
  151.     goto L35;
  152.     }
  153. /*<       locnn=loc >*/
  154.     locnn = loc;
  155. /*<    50 loc=nodplc(jcpt+loc) >*/
  156. L50:
  157.     loc = nodplc[tabinf_1.jcpt + loc - 1];
  158. /*<       if (loc.eq.0) go to 30 >*/
  159.     if (loc == 0) {
  160.     goto L30;
  161.     }
  162. /*<       j=nodplc(jcolno+loc) >*/
  163.     j = nodplc[tabinf_1.jcolno + loc - 1];
  164. /*<       jord=nodplc(irswpf+j) >*/
  165.     jord = nodplc[tabinf_1.irswpf + j - 1];
  166. /*<       value(lvn+iord)=value(lvn+iord)- >*/
  167. /*<      1           value(lvn+loc)*value(lvn+jord) >*/
  168.     blank_1.value[tabinf_1.lvn + iord - 1] -= blank_1.value[tabinf_1.lvn + 
  169.         loc - 1] * blank_1.value[tabinf_1.lvn + jord - 1];
  170. /*<       go to 50 >*/
  171.     goto L50;
  172. /*<   100 call second(t2) >*/
  173. L100:
  174.     second_(&t2);
  175. /*<       rstats(46)=rstats(46)+t2-t1 >*/
  176.     miscel_1.rstats[45] = miscel_1.rstats[45] + t2 - t1;
  177. /*<       return >*/
  178.     return 0;
  179. /*<       end >*/
  180. } /* dcsol_ */
  181.  
  182. #undef cvalue
  183. #undef nodplc
  184.  
  185.  
  186.